﻿#define _CRT_SECURE_NO_WARNINGS
//(*(void (*)())0)();
////(void (*)())这一部分是对0 进行强制类型的转换，换成函数指针类型
////调用0地址处的函数，该函数无实参，返回类型是void
//void (*signal(int, void(*)(int)))(int);
//// signal(int, void(*)(int))这是一个函数声明语句，表明signal 这个函数的一个实参是int类型，一个是函数指针类型void(*)(int)
////此代码说明signal 函数返回类型是void(*)(int)，函数指针指向函数的参数是int ，返回类型是void
#include<stdio.h>
#include<math.h>
int main1()
{
	int i = 1;
	for (i = 1; i < 99999; i++)
	{
		int tmp = i;
		int count = 0;//表示统计一个数的位数
		int sum = 0;
		while (tmp)//求一个数的位数，利用整数除法向下取整的特性
		{
			count++;
			tmp /= 10;
		}
		tmp = i;
		while (tmp)
		{
			sum += pow(tmp % 10, count);//pow 表示求一个数的n 次方，即求 tmp % 10 的 count次方,pow的使用需要引入头文件#include<math.h>
			tmp /= 10;//依次去掉一个数的个位数
		}
		if (sum == i)
		{
			printf("count位数的有:%d\n", i);
		}
	}
	return 0;
}
int main2()
{
	int n = 0;//表示求和的项数
	scanf("%d", &n);
	int num = 2;
	int sum = 0;
	for (int i = 0; i < n; i++)
	{
		sum += num;
		num = num * 10 + 2;
	}
	printf("%d", sum);
	return 0;
}
int Fib(int n)
{
	if (n >= 3)
	{
		return Fib(n - 1) + Fib(n - 2);
	}
	else
	{
		return 1;
	}
}
int Fib1(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;
	while (n > 2)
	{
		c = a + b;//当 n>2 时才开始计算，注意他和下面2个代码不能换位置

		a = b;
		b = c;
		n--;
	}
	return c;

}
int main4()
{
	//递归，求斐波那契数
	//弊端;递归越深，冗余计算越多，重复次数过多，
	//用循环来写
	int n = 0;//n 表示第几项
	scanf("%d", &n);
	int ret = Fib1(n);
	printf("%d\n", ret);
	return 0;
}
int fun(int n)
{
	if (n <= 9)
	{
		return n;
	}
	else
	{
		return n % 10 + fun(n / 10);
	}
}
int main3()
{
	int n = 0;
	scanf("%d", &n);
	int ret = fun(n);
	printf("%d", ret);
	return 0;
}
int main8()
{
	//求2个数的最小公倍数 = 2 个数之积 / 2个数的最大公约数
	//利用辗转相除法求最大公约数：这种方法可以不用比较2个数的大小
	int n = 0, m = 0;
	scanf("%d %d", &n, &m);// n:被除数   m：除数
	int a = n * m;//先用a把 m*n 的值存起来，因为后面m,n的值会变
	int c = 0;
	while (c = n % m)
	{
		//辗转相除法求最大公约数
		n = m;
		m = c;
	}
	
	printf("最小公倍数:%d\n",a/m);//m 表示辗转相除后求得最大公约数 注意：( n * m ) / m 是错误的写法
	return 0;
}
int main66()
{
	int n = 0, m = 0;
	scanf("%d %d", &n, &m);// n:被除数   m：除数
	int max = (n > m) ? n : m;//求2个数的最大值
	while (1)
	{
		if ((max % n == 0) && (max % m == 0))
		{
			printf("最小公倍数:%d\n", max);
			break;
		}
		max++;//依次让 max + 1,直到找到一个数可以同时整除n,m
	}
	return 0;
}
int main()
{
	int arr[4] = { 0 };
	for (int i = 0; i < 4; i++)
	{
		scanf("%d", &arr[i]);
	}
	int max = arr[0];
	for (int i = 1; i < 4; i++)
	{
			max = max > arr[i] ? max : arr[i];
	}
	printf("%d\n", max);
	return 0;
}